#include <assert.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>

// int main() {
//   const char* str1 = "hello fwrite\n";
//   const char* str2 = "hello write\n";

//   // C标准库接口
//   printf("hello printf\n");
//   fprintf(stdout, "hello fprintf\n");
//   fwrite(str1, strlen(str1), 1, stdout);

//   // 系统调用接口
//   write(1, str2, strlen(str2));
//   return 0;
// }

///////////////////

// int main() {
//   // char* ptr = NULL;
//   const char* str1 = "hello fwrite\n";
//   const char* str2 = "hello write\n";

//   // 语言接口
//   printf("hello printf\n");
//   fprintf(stdout, "hello fprintf\n");
//   fwrite(str1, strlen(str1), 1, stdout);

//   // 系统调用接口
//   write(1, str2, strlen(str2));
//   fork();
//   return 0;
// }

// //////////////////
// int main() {
//   const char* str1 = "hello fwrite\n";
//   const char* str2 = "hello write\n";

//   // 语言接口
//   printf("hello printf\n");
//   fprintf(stdout, "hello fprintf\n");
//   fwrite(str1, strlen(str1), 1, stdout);

//   // 系统调用接口
//   write(1, str2, strlen(str2));
//   close(1);
//   return 0;
// }

// //////////////////
// int main() {
//   const char* str1 = "hello fwrite";
//   const char* str2 = "hello write";

//   // 语言接口
//   printf("hello printf");
//   fprintf(stdout, "hello fprintf");
//   fwrite(str1, strlen(str1), 1, stdout);

//   // 系统调用接口
//   write(1, str2, strlen(str2));
//   close(1);
//   return 0;
// }

// //////////////////
// int main() {
//    printf("hello printf");
//   return 0;
// }

// //////////////////
// #define filename "test.txt"
// int main() {
//   FILE* fp = fopen(filename,"w");
//   setvbuf(fp, NULL, _IONBF, 0);
//   fprintf(fp,"unbuffered test\n");
//   sleep(10);
//   fclose(fp);
//   return 0;
// }

// //////////////////
// #define filename "test.txt"
// int main() {
//   FILE* fp = fopen(filename, "w");
//   fprintf(fp, "fully buffered test\n");
//   sleep(3);
//   fclose(fp);
//   return 0;
// }

// //////////////////

// #define filename "test.txt"
// int main() {
//   FILE* fp = fopen(filename, "w");
//   // 不考虑打开失败
//   char* massages[] = {"line buffered test 1\n", "line buffered test 2\n",
//                       "line buffered test 3\n", "line buffered test 4\n",
//                       "line buffered test 5\n"};
//   setvbuf(fp, NULL, _IOLBF, 0);
//   for (int i = 0; i < sizeof(massages) / sizeof(char*);++i){
//     fprintf(fp,"%s",massages[i]);
//     sleep(1);
//   }
//   fclose(fp);
//   return 0;
// }

// //////////////////

// #define filename "test.txt"
// int main() {
//   printf("hello world\n");
//   return 0;
// }

// ////////////////

// int main() {
//   char *ptr = NULL;
//   setvbuf(stdout, NULL, _IOFBF, 0);
//   printf("hello world\n");
//   *ptr = 'a';
//   return 0;
// }

////////////////

int main() {
  char *ptr = NULL;
  setvbuf(stdout, NULL, _IOFBF, 0);
  printf("hello world\n");
  assert(ptr);
  return 0;
}